{
 "cells": [
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_smpso_preference:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## SMPSO/RP"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Enter 2-points of dimension 2: \n"
     ]
    }
   ],
   "source": [
    "from jmetal.algorithm.multiobjective.smpso import SMPSORP\n",
    "from jmetal.operator import PolynomialMutation\n",
    "from jmetal.problem import ZDT4\n",
    "from jmetal.util.archive import CrowdingDistanceArchiveWithReferencePoint\n",
    "from jmetal.util.termination_criterion import StoppingByEvaluations\n",
    "\n",
    "problem = ZDT4()\n",
    "\n",
    "swarm_size = 100\n",
    "\n",
    "reference_point = [[0.1, 0.8],[0.6, 0.1]]\n",
    "archives_with_reference_points = []\n",
    "\n",
    "for point in reference_point:\n",
    "    archives_with_reference_points.append(\n",
    "        CrowdingDistanceArchiveWithReferencePoint(int(swarm_size / len(reference_point)), point)\n",
    "    )\n",
    "\n",
    "max_evaluations = 50000\n",
    "algorithm = SMPSORP(\n",
    "    problem=problem,\n",
    "    swarm_size=swarm_size,\n",
    "    mutation=PolynomialMutation(probability=1.0 / problem.number_of_variables, distribution_index=20),\n",
    "    reference_points=reference_point,\n",
    "    leaders=archives_with_reference_points,\n",
    "    termination_criterion=StoppingByEvaluations(max=max_evaluations)\n",
    ")\n",
    "\n",
    "algorithm.run()\n",
    "solutions = algorithm.get_result()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can now visualize the Pareto front approximation:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "is_executing": true,
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from jmetal.lab.visualization.plotting import Plot\n",
    "from jmetal.util.solution import get_non_dominated_solutions\n",
    "\n",
    "front = get_non_dominated_solutions(solutions)\n",
    "\n",
    "plot_front = Plot(plot_title='Pareto front approximation', axis_labels=['x', 'y'], reference_point=reference_point)\n",
    "plot_front.plot(front, label='SMPSORP-ZDT4')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### API"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%% raw\n"
    },
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autoclass:: jmetal.algorithm.multiobjective.smpso.SMPSORP\n",
    "   :members:\n",
    "   :undoc-members:\n",
    "   :show-inheritance:\n"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "metadata": {
     "collapsed": false
    },
    "source": []
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
